package com.online.coding.exam.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;

/**
 * Created by Guanzhong Hu
 * Date :2020/1/4
 * Description : 利用shell进行源码编译，
 * 由于windows装gcc装了好多次装不进去。。所以改成Linux服务器进行测试，所以不支持windows测试编译
 * Version :1.0
 */
public class CodeComplieUtli {
    /*
     * java中调用shell脚本并获取返回值，linux下tomcat运行
     */
    public static void main(String[] args) {
        // 第一个参数执行命令，第二个参数脚本名，第三个是预输入 以此类推
        ProcessBuilder pbsh = new ProcessBuilder("bash", "shell.sh","");
        pbsh.directory(new File("/usr/homework"));// 指定检查脚本存放目录，绝对路径
        /*相对路径方式
        ProcessBuilder pb = new ProcessBuilder("bash", "./scripts/test.sh");
		pb.directory(new File(System.getProperty("user.dir")));//运行当前路径
        */
        pbsh.redirectErrorStream(true);//合并标准错误和标准输出
        try {
            Process pr = pbsh.start();
            // 读取输出，脚本运行结束后获取返回值，流的转换
            BufferedReader stdInput = new BufferedReader(new InputStreamReader(pr.getInputStream()));
            StringBuffer strBuf = new StringBuffer();
            String line;
            while ((line = stdInput.readLine()) != null)//echo输出多值，循环读取直到结束
            {
                strBuf.append(line).append("^");
            }
            String[] result = strBuf.toString().split("\\^");
            for (int i = 0; i < result.length; i++) {
                System.out.println(result[i]);
            }
            pr.waitFor();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
